#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#pyversion:python3.5
#owner:fuzj
'''
此脚本用于判断用户登录账户密码,若账户名密码正确 则通过验证,若账户名密码输错三次,则锁定该用户,若输入的用户不存在或已经被禁用,则返回此用户
被禁用,请联系管理员
'''


#定义一个函数,来获取UserInfo 文件中的用户信息,筛选并返回一个当前输入的用户的相关信息
def get_UserInfo(option):
    AllUser = []
    try:
        fp = open("UserInfo",'r')
    except:
        print("No UserInfo file")
        exit()
    for i in fp.readlines():
        m = i.strip('\n').split(",")    #将readlines返回的列表中每个值使用','分割重新生成一个子列表
        user = dict(item.split('=')[:2] for item in m) #以用户为单位,将子列表转换为一个用户字典
        AllUser.append(user)  #把每个用户的字典合成一个用户信息列表
    fp.close()
#筛选出函数传递参数中的用户,返回此用户相关信息
    for u in AllUser:
        if option == u['name']:
            UserInfo = u
            break
        else:
            UserInfo = {'name':"","password":"","enable":""}  #用户不存在则返回一个空的用户字典
    return UserInfo


#禁用用户的函数,修改用户的enable为0 表示已禁用
def disable_user(user):
    fp = open("UserInfo",'r').readlines()
    fw = open("UserInfo", 'w')
    for i in fp:
        if user in str(i):
            i = i.replace("enable=1","enable=0")
        fw.write(i)
    fw.close()



current_login = {}    #存储脚本本此运行输入的用户及其次数
for i in range(10):
    username = input("UserName: ")
    password = input("Password: ")
    UserInfo = get_UserInfo(username)
    status = UserInfo['enable']
    if status != "1":                  #判断用户的状态,若已被禁用,返回用户信息.接着第二次循环,否则继续下面判断
        print("User %s is disabled,Please contact administrator..." % username)
    else:
        if username == UserInfo['name'] and password == UserInfo['password']:   #判断用户名密码
            print("Hi: %s,Welcome to Login..." % username)
            exit()
        else:
            print("Your Username or Password is invalid...")
            if username in current_login.keys():              #判断此用户之前是否输入过,若曾输入过,其次数+1,若未曾输入过则加入current_login
                current_login[username] = current_login[username] + 1
            else:
                current_login[username] = 1
        if current_login[username] >= 3:    #判断此用户一共输入的次数,超过3此则锁定该用户
            print("User %s is disabed Now !!!, Please go away" % username)
            disable_user(username)
            exit()



